//程序入口文件
//加载express模块
const express = require("express");
//加载模板模块，处理前后端的页面
const swig = require("swig");
//加载数据库模块
const mongoose = require("mongoose");
//加载解析模块
const bodyParser = require("body-parser");
//加载cookies模块
const Cookies = require("cookies");

var User = require("./models/User");
//创建应用，这个应用有app应用 http.createServer();
var app = express();
// 加入markdown
var markdown = require('markdown-js');
/*
	配置中间件
	定义当前所使用模板引擎（页面要用什么模板语言来渲染） render
	swig.renderFile


	第一个参数：模板引擎的名称，同时也是模板文件的后缀
	第二和参数：用于哪种方式进行模板内容的解析
 */
app.engine("html", swig.renderFile);
/*
	设置模板文件的存放目录
	第一个参数 必须是views
	第一个参数 目录
 */
app.set("views", "./views");
/*
	注册所使用的模板引擎
	第一个参数  必须是 view engine
	第二个参数  app.engine 第一个参数一样
 */
app.set("view engine", "html");

/*
	【注】在开发阶段，取消模板缓存
 */
swig.setDefaults({cache: false});

/*
	app.get() app.post() 精准匹配
	app.use() 只要经过这个路由就触发
 */
//设置静态资源的加载路径

app.use("/public", express.static(__dirname + "/public"));
// 内存检查
const memeye = require('memeye');
memeye();
//body-parser设置
app.use(bodyParser.urlencoded({extended: true}));
/*
	设置cookies
 */
app.use(function(req, res, next){
	//后续所有的页面上都可以通过 req.cookies调用cookie
	req.cookies = new Cookies(req, res);
	req.markdown = markdown;//挂载markdown
	/*
		每一次加载页面的时候，都会先来加载app.js，在这里判断用户是否已经登录
		再将数据，分发到各个页面
	 */
	req.userInfo = {};
	if(req.cookies.get("userInfo")){
		try{
			req.userInfo = JSON.parse(req.cookies.get("userInfo"));
			User.findById(req.userInfo._id).then(function(userInfo){
				//将是否为 admin存到req.userInfo里面
				req.userInfo.isAdmin = Boolean(userInfo.isAdmin);
				next();
			})
		}catch(error){
			console.log(error);
			next();
		}
	}else{
		next();
	}

})

//监听跳转路径
app.use("/", require("./routers/main"));
app.use("/api", require("./routers/api"));
app.use("/admin", require("./routers/admin"));


//链接数据库
mongoose.connect("mongodb://127.0.0.1:27017/blog", function(err){
	if(err){
		console.log("数据库链接失败：" + err);
	}else{
		console.log("数据库链接成功");
		//监听端口号
		app.listen("8089");
		console.log("listen to http://localhost:8089");

	}
})





















